<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>链表linkedList封装</title>
</head>
<body>
</body>
</html>
<script>
    // 封装链表
    function linkedList() {
        // 链表头部
        var head = null;
        // 链表长度
        var length = 0;

        // 链表节点，封装成内部类,节点包括data和next两部分，next指向下一个节点
        // 此处不直接传入暂不知道next指向，先不作为参数传入，直到下一个节点时再进行赋值
        function Node(data) {
            this.data = data;
            this.next = null;
        }

        // 注入append(element)方法，末尾添加一个节点
        linkedList.prototype.append = function(data) {
           // 1、创建一个新的节点
           var newNode = new Node(data);
           // 2、判断添加的是否是第一个节点
           if(this.length === 0){
               this.head = newNode;
           } else {
            // 3、添加的不是第一个节点，需要先找到它的上一个节点
            var current = null;           // 定义一个当前变量
            // 如果当前变量存在下一个节点，
            // 将当前变量指向下一个节点，若下一个节点依然存在下一个节点，则一直循环，
            // 直到current的下一个节点不存在，说明current就是最后一个节点
            while(current.next){
                current = current.next;
            }
            current.next = newNode;
           }   
        }
        this.length += 1;
    }
</script>